2015-12-14 90 views
0

我有大約175製表符分隔的目錄中的文件txt。我對第一列感興趣,我想從每個文件的第一列中刪除所有重複的項目,然後將它們打印爲新的txt文件中的列。使用awk命令來操縱列

#this removes all duplicates in column 1 of myFile.txt 
awk '!x[$1]++' myFile.txt 

#this copies all coulmn 1 from every file and paste them as columns in a new file 

#!/bin/bash 
OUT=AllColumns.tsv 
touch $OUT 

for file in *.txt 
do 
    paste $OUT <(awk -F\\t '{print $1}' $file) > $OUT.tmp 
    mv $OUT.tmp $OUT 
done 

我的問題,我怎麼能結合這兩種命令,以便它打印出從每個文件的第1列(不重複的項目)到一個新的文件列?

+0

你的意思呢? 'AWK '{A [$ 1]} END {打印X(在X)}' * .txt' – Kent

+0

顯示從幾個輸入文件,哪些輸出應該是幾行。我不確定你的意思是什麼「..成爲一個新的文件列」。你的意思是應該有一個輸出文件有多個列,每列對應於其中一個輸入文件的列1? – jas

回答

0

打印在一個新文件(1每原始TXT)由文件的第一列中,只有第一次出現(原始文件名+ .filtered.txt

awk '!($1 in F){F[$1]++; print $1 > FILENAME ".filtered.txt" }' *.txt 

如果需要的uniq PER文件(感謝@karakfa爲這句話)

awk '!($1","FILENAME in F){F[$1","FILENAME]++; print $1 > FILENAME ".filtered.txt" }' *.txt 
+1

這將在所有文件中打印唯一項目,而不是每個文件都唯一。可能或不可能是OP要求的。 – karakfa

+0

@karakfa好評,回覆適合案件 – NeronLeVelu