我有以下0.txt檔案,按列(欄位)分隔內容:
'Disinfectants', 'Brand A', 'Brand B', 'Brand C'
'brand A', 'below brand C', 'greater than brand B'
'brand B', 'greater than brand D', 'below brand A'
我想在每次出現模式(比如“品牌 A”)時查找(從第二列),并列印出屬于找到該模式的行的第一列的內容。對于這兩個結果檔案的內容是這樣的:
Disinfectants
brand B
我見過其他類似的問題,但只列印發現模式的列本身,通常使用grep.
編輯更新:從@jubilatious1 建議中,我在作業系統上發現了一個問題(https://stackoverflow.com/a/9153113),作為我尋找解決方案的一部分。
awk '/brand A/{ print substr( $1, RLENGTH )}' 0.txt > 1.txt
但我的1.txt輸出與預期不同,因為它只列印了第一個欄位(列)的部分內容:
'brand
'brand
此外,僅使用 awk '/brand A/{ print substr( $1, RLENGTH )}'我無法指定搜索僅適用于每行的第二個欄位(列)。
編輯更新 1:也許只是修復輸出,awk '/brand A/{ print substr( $1, RLENGTH )}'以便正確列印第一列中欄位的內容是第一步。
uj5u.com熱心網友回復:
黑客管道:
cut -d, -f2- 0.txt | grep -ni 'brand a' | sed 's/:.*/p/' | sed -nf- 0.txt | cut -d, -f1
- 在逗號上拆分并省略欄位 1
- grep 帶有“品牌 a”的行號(不區分大小寫)
- 將行號轉換為
{linenumber}p-- sed 命令來列印該行 - 將這些 sed 命令通過管道傳輸到
sed -nf-......這只會在從 stdin 指示時列印......所以你只能得到你想要的行 - 以逗號分隔并僅列印第一個欄位
或 perl:
perl -lanF, -e 'print $F[0] if grep /brand a/i, @F[1..$#F]' 0.txt
- 自動拆分為
@F逗號,如果在任何其他欄位中找到“品牌 a”(不區分大小寫),則列印第一個欄位。
兩者都輸出這個:
'Disinfectants'
'brand B'
您可以隨意洗掉單引號,或者,您可以更改splitperl autosplit的正則運算式:
perl -lanF"/[',] /" -e 'print $F[1] if grep /brand a/i, @F[2..$#F]' brand.txt
要得到這個:
Disinfectants
brand B
...請注意,一旦該行以拆分分隔符開頭,$F[0]則為空字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/330339.html
