我有一个以下格式的文本文件:
001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX
我需要将这个文件拆分为与每个“|”对应的文件。新文件的名称,例如 fileA 、fileB、fileC...fileX 。
答案1
尝试
awk -F\| '{ print $1 > $2 ; }' file
在哪里
-F\|
告诉 awk 用作|
分隔符,|需要逃脱。> $2
将 print 重定向到$2
的值。
如果有许多(> 10)个文件:
for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
- 第一个 awk 仅列出 uniq 文件名
- 52 个文件就可以了,但如果是数百个文件,速度可能会变慢。
另一种选择,只要字段可以“安全”地放入 shell 中
awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
- 请务必先删除fileX,以防重新运行。