注意:发自我之前的帖子。这不直接适用,但与调整非常相似
我有一个包含以下内容的文件 1.txt。
-----cat 1.txt-----
1234
5678
1256
1234
1247
我在一个文件夹中还有 3 个文件
-----ls -lrt-------
A1.txt
A2.txt
A3.txt
这三个文件的内容是相似的格式,具有不同的数据值(所有三个文件都是制表符分隔的)
-----cat A1.txt----
A X 1234 B 1234
A X 5678 B 1234
A X 1256 B 1256
-----cat A2.txt----
A Y 8888 B 1234
A Y 9999 B 1256
A X 1234 B 1256
-----cat A3.txt----
A Y 6798 C 1256
我的目标是对 1.txt 中的文本的所有 A1、A2 和 A3(仅针对 TAB 分隔文件的第 3 列)进行搜索,并且输出必须重定向到文件 matches.txt,如下所示。
Code:
/home/A1.txt:A X 1234 B 1234
/home/A1.txt:A X 5678 B 1234
/home/A1.txt:A X 1256 B 1256
/home/A2.txt:A X 1234 B 1256
以下应该工作。
cat A*.txt | tr -s '\t' '|' > combined.dat
{ while read myline;do
recset=`echo $myline | cut -f19 -d '|'|tr -d '\r'`
var=$(grep $recset 1.txt|wc -l)
if [[ $var -ne 0 ]]; then
echo $myline >> final.dat
fi
done } < combined.dat
{ while read myline;do
recset=`echo $myline | cut -f19 -d '|'|tr -d '\r'`
var=$(grep $recset 1.txt|wc -l)
if [[ $var -ne 0 ]]; then
echo $myline >> final2.dat
fi
done } < combined.dat
使用 AWK
awk 'NR==FNR{a[$0]=1}$3 in a{print FILENAME":"$0}' 1.txt A* > matches.txt
对于管道分隔
awk –F’|’ 'NR==FNR{a[$0]=1}$3 in a{print FILENAME":"$0}' 1.txt A* > matches.txt