Shell-Script
從 40 行文件中提取每 2 行並創建一個新文件
我有一個包含 40 行的文件,如下所示:
0001.Group admin_group 0001.Users adam, sam, paul, david, jennifer, harry 0002.Group Dev_group 0002.Users mike, pauli, gary, sherry 0003.Group Sec_group 0003.Users david, diana, mike, paul, harry 0004.Group Main_group 0004.Users wilson, robert, samule
我需要使用前綴提取組和使用者,並創建一個與組同名的新文件。
應該是這樣的:
- 輸出文件名:
admin_group
,內容:0001.Group admin_group 0001.Users adam, sam, paul, david, jennifer, harry
- 輸出文件名:
Dev_group
,內容:0002.Group Dev_group 0002.Users mike, pauli, gary, sherry
最後,我需要有 20 個新的文本文件。我嘗試使用 sed 和 awk 創建兩個單獨的文件,但失敗了。我怎樣才能在 Bash 或 Python 中得到這個?
與
awk
:$ awk -v FS="\t" '$1 ~ /Group/ { file = $2 } { print $0 > file }' input.txt
awk
檢查第一列中是否有Group
。如果是這種情況,我們將第二列的值儲存在變數中file
。檢查後,整行將被列印並重定向
>
到名稱儲存在變數中的文件file
。
我們可以使用
sed
編輯器並在輸入文件上執行 2 遍。第一遍生成要在第二遍中使用的 sed 命令列表,以生成所需的輸出。$ sed -ne ' s/.*[[:blank:]]// s|.*|/&/{N;w &\n}|w sed_code n ' input-file.txt
然後這是第二遍。假設要創建的文件名不包含任何正則表達式特殊字元。
$ sed -nf sed_code input-file.txt
我們也可以為這個任務部署 Perl:
$ perl -aMautodie -pe ' open my $fh, ">", $F[1]; $_ .= <>; select $fh; ' input.txt