grep輸出從long到wide
我有一個(gè)模式文件,我想返回找到模式的所有行號(hào),但格式很寬,不長(zhǎng)/排列。示例:文件a.txt德國(guó)UK文件b.txtusausaitalygermanyukukcanadacanadagermanyaustraliau
解答動(dòng)態(tài)
Using GNU數(shù)據(jù)mash:
$grep-n-x-F-F美元文件A.txt文件B.txtdatamash-s-t:-g2折疊1德國(guó):4,9英國(guó):5,6美國(guó):1,2,11 首先使用grep從文件B.txt這完全符合文件A.txt, 輸出匹配的行號(hào)以及行本身。
除了問題中使用的選項(xiàng)外,我還使用了-x和-F。我這樣做是為了避免從文件A.txt作為正則表達(dá)式(-F),并匹配完整的行,而不是子字符串(-x)。
Datamash實(shí)用程序然后將其解析為:-分隔字段(-t:)的行,在第二個(gè)字段(-g2;國(guó)家)上排序(-s),并將第一個(gè)字段(折疊1;行號(hào))折疊到一個(gè)列表中對(duì)于每個(gè)country.
,如果愿意,您可以使用tr':,''作為額外的管道步驟,用空格替換冒號(hào)和逗號(hào),或者用tr':,''\t'替換制表符。
$grep-n-x-f文件A.txt-F級(jí)文件B.txtdatamash-s-t:-g 2 collapse 1
tr':,''\t'德國(guó)4 9英國(guó)5 6美國(guó)1 2 11
$grep-NXF公司文件A.txt文件B.txt\
awk-F:“$0=(長(zhǎng)度($2)FS$0)”\
排序-t:-k1,1nr-k3,3-k2,2n\
剪切-d:-f2-\
sed-Ee”:a$!N、 y/://s/(\s+)\N(.*\1)$/\2/ta s/([^\N]*)([^\N]*)((\N.*))$/\2\1\3/P;D' O/P:
4德國(guó)9美國(guó)12 11英國(guó)5 6您可以將grep命令輸出與Miller耦合(https://github.com/johnkerl/miller)并運(yùn)行
grep-nf文件A.txt文件B.txt\mlr--c2n--ifsquot;--implicit csv header--headerless csv output reorder-f2 then\nest--內(nèi)爆--values--跨記錄--nested fs如果您選擇了德國(guó)、美國(guó)、英國(guó)
- End
免責(zé)聲明:
本頁(yè)內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁(yè)內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。