[英]How to paste values from a tab delimited table into a second file matching a word in column 1 from the first file
[英]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
預期的輸出將是兩個文件
B1.txt(包含)
TEST1 TEST2 TEST3
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.txt
和B2.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.