Shell-Script

從 40 行文件中提取每 2 行並創建一個新文件

  • April 5, 2019

我有一個包含 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

引用自:https://unix.stackexchange.com/questions/497844