[英]Using gawk to extract rows with string in a column
我試圖從制表符分隔的文件中提取行,如果它在第 4 列中包含某個單詞。 例如,如果輸入文件 test.txt 是:
chr 8 1234 abc ; xyz
chr 8 1255 abc
chr 8 987 xyz
chr 8 5467 jxyzm
以下代碼僅正確輸出第一行和第三行:
gawk -F"\t" ' { if($4 ~ /\<xyz\>/) print $0 } ' test.txt >> test.out
但是,當我嘗試在循環中運行它時,在 bash 腳本中,我的 output 文件是空白的。 我正在使用的代碼是:
while read id
do
OFILE=${ODIR}/${id}.txt
gawk -v id="$id" -F"\t" ' { if($4 ~ /\<id\>/) print $0 } ' ${IFILE} >> ${OFILE}
done < ${GFILE}
文件 ${GFILE} 每行一個單詞,例如:
xyz
fg45
tre2y
我究竟做錯了什么?
謝謝!
編輯為:
您可以很好地使用awk
從一個文件中讀取搜索模式並在其他文件中查找匹配項,如下所示:
awk -F '\t' '
NR == FNR {
words[$1]
next
}
{
for (w in words)
if (index($4, w)) {
print > w ".txt"
break
}
}' "$GFILE" "$IFILE"
然后檢查output:
cat xyz.txt
chr 8 1234 abc ; xyz
chr 8 987 xyz
如果您真的-真的想修復您的 shell 腳本,那么這里是:
while read id; do
awk -F '\t' -v id="$id" '$4 ~ id' "$IFILE" > "$id.txt"
done < "$GFILE"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.