2015-12-14 67 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