2016-01-06 93 views
2
#file test.txt 

    a b c 5  
    d e f g h 7 
    gg jj 2 

說X = 3我需要這樣的輸出:更新:擊+ awk中:打印第一X(動態)列和總是最後一列

#file out.txt 
    a b c 5 
    d e f 7 
    gg jj 2 

NOT此:

a b c 5 
d e f 7 
gg jj 2 2 <--- WRONG 

我已經得到了這個階段:

cat test.txt | awk ' { print $1" "$2" "$3" "NF } ' 
+0

'awk'可以讀取文件,而不需要'貓'並通過管道發送。習慣用法是'awk'{...}'file1'或'awk'{...}'file1 file2'等 –

回答

2

如果你不確定場的總數,再一種選擇是使用一個循環:

awk '{ for (i = 1; i <= 3 && i < NF; ++i) printf "%s ", $i; print $NF }' file 

循環可以通過使用三元避免:

awk '{ print $1, $2, (NF > 3 ? $3 OFS $NF : $3) }' file 

這比the approach suggested by 123稍微詳細而是意味着你沒有留下與三個字段行尾部的空白。 OFS是輸出字段分隔符,默認情況下爲空格,當您使用,時,這是print在字段之間插入的空格。

1

使用$結合NF

cat test.txt | awk ' { print $1" "$2" "$3" "$NF } ' 
+0

或使用輸出字段分隔符:'awk'{OFS =「」;打印$ 1,$ 2,$ 3,$ NF}'文件' – Cyrus

+0

@Cyrus無論如何,這就是默認的OFS,不需要設置它。 – 123

+0

@ 123:是的,這沒問題:'awk'{print $ 1,$ 2,$ 3,$ NF}'file'。謝謝。 – Cyrus

相關問題