簡體   English   中英

連接第二列中第一列中匹配值的行並生成文件

[英]Concatenate second column rows for the matching values in First column and generate file

我需要根據第一列值生成文件(單個文件)。

源文件就像

Batch No ; Values 
-------------------
B1       ; TEST1
B1       ; TEST2
B1       ; TEST3
B2       ; DELTA1
B2       ; DELTA2

預期的輸出將是兩個文件

  1. B1.txt(包含)

     TEST1 TEST2 TEST3 
  2. B2.txt(包含)

     DELTA1 DELTA1 

源文件數據每次都會變化,但結構(列數和定界符)將保持一致

有什么建議嗎?

您可以為此使用awk。

awk -F" *; *" 'NR > 2{print $2 > $1 ".txt"}' source.txt

假設您的源文件是source.txt並且包含

Batch No ; Values 
-------------------
B1       ; TEST1
B1       ; TEST2
B1       ; TEST3
B2       ; DELTA1
B2       ; DELTA2

結果是兩個文件: B1.txtB2.txt

  • -F" *; *" :定義字段分隔符。 在這種情況下,分號以及分號前后的任意數量的空格。
  • NR > 2 :您跳過前兩行。
  • $1$2存儲第一和第二列的內容。
  • 使用>可以將print命令的輸出重定向到相應的文件,而不是打印到標准輸出。

這是帶有awk的一個襯里:

tail -n +3 test.txt | awk '{print $3>$1".txt"}'

尾號-n +3刪除標題的前兩行; awk腳本在以.txt串聯的第一個字段命名的文件中打印第三個字段的值

默認的awk字段分隔符為空格,因此在您的示例中為; 是我們刪除的字段#2。 輸入文件甚至不必按第一個字段進行排序即可工作。

#!/bin/bash
while read -r file data; do
    echo "${data#; *}" >> "$file".txt
done < <(sed -n -e '1,/^---/!p' source_file)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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