[英]Using the paste command with awk
我的腳本的目的是將每個文本文件的第二列放在一個目錄中,並將結果粘貼到一個文本文件中。
例如,如果我有三個格式為的文本文件:
age 30
gender m
weight 200
我想要輸出
age 30 40 50
gender m m f.
weight 200 194 143
這是我目前的代碼:
!/bin/csh
set z = "e"
foreach y (*.txt)
if ($z == "e") then
echo "creating first columns for $y"
awk '{print $1}' $y > $SUBJECTS_DIR/vol_files/$y:r_rhvol.txt
else
echo "first columns have already been created for $y"
endif
echo "now adding the data for $y"
set v = (awk '{print $2}' $y)
paste $v >> $SUBJECTS_DIR/vol_files/$y:r_rhvol.txt
set z = "f"
end
謝謝!
這里有一個讓我在娛樂的時候娛樂:
$ join foo <(join foo foo )
age 30 30 30
gender m m m
weight 200 200 200
這是awk中的一個:
$ awk '{a[$1]=a[$1] (a[$1]==""?"":OFS) $2}END{for(i in a)print i, a[i]}' foo foo foo
age 30 30 30
weight 200 200 200
gender m m m
解釋:
$ awk '
{ a[$1]=a[$1] (a[$1]==""?"":OFS) $2 } # hash on the first field and append append
END { for(i in a) # after all files hashed
print i, a[i] } # print (in random order, though)
' foo foo foo
使用paste + awk管道的簡短解決方案,用於具有已知結構的多個文件。
假設我們有5個文件(可能更多):
paste $SUBJECTS_DIR/vol_files/*.txt | awk '{for(i=3;i<=NF;i+=2) $i=""}1'
示例輸出:
age 30 40 50 60 70
gender m m f. e g
weight 200 194 143 300 400
awk '{for(i=3;i<=NF;i+=2) $i=""}1'
- 從連接的行中刪除重復的標題列age , gender ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.