簡體   English   中英

使用 gawk 提取列中帶有字符串的行

[英]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

我究竟做錯了什么?

謝謝!

編輯為:

  1. 在輸入文件中添加第四行
  2. 將 -v id="$id" 添加到命令...腳本仍然不起作用!

您可以很好地使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM