2012-07-24 16 views
4

我正在尋找其他替代方案/更智能的1班輪以下命令,它應該爲要求的列編號添加一個值。 我試過下面的sed命令可以正常工作,將值4添加到第4列。 [需要:因爲我有這樣的文件,其中包含1000個記錄&很多時候我需要添加一個列之間的任何位置。] 我的接近只適用於較小規模。在unix中爲文件中的任何位置添加一列[使用awk或sed]

cat 1.txt

1|2|3|5 
1|2|3|5 
1|2|3|5 
1|2|3|5 

sed -i 's/1|2|3|/1|2|3|4|/g' 1.txt

cat 1.txt

1|2|3|4|5 
1|2|3|4|5 
1|2|3|4|5 
1|2|3|4|5 

thansk提前。

回答

6

單向使用awk。將兩個參數傳遞給腳本,列號和要插入的值。該腳本遞增字段數(NF)並遍歷最後一個字段直到指示的位置並插入新值。

運行此命令:

awk -v column=4 -v value="four" ' 
    BEGIN { 
     FS = OFS = "|"; 
    } 
    { 
     for (i = NF + 1; i > column; i--) { 
      $i = $(i-1); 
     } 
     $i = value; 
     print $0; 
    } 
' 1.txt 

隨着下面的輸出:

1|2|3|four|5 
1|2|3|four|5 
1|2|3|four|5 
1|2|3|four|5 
2

一個使用coreutils和工藝替代方式:

f=1.txt 
paste -d'|'      \ 
    <(cut -d'|' -f1-3 $f   ) \ 
    <(yes 4 | head -n`wc -l < $f`) \ 
    <(cut -d'|' -f4- $f   ) 
1

一種方法,使用的coreutils和工藝替代:

sed 's/3|/3|4|/' 1.txt 
+1

其實在這個答案中沒有進程替代。看起來像從[另一個答案](https://stackoverflow.com/a/11628164/56541)複製該標題,可能沒有理解它。 (無論如何,sed是coreutil?) – 2017-11-19 02:22:02

相關問題