我有一个名为" list.txt"的文件。其中包含以下几行数字。
31056780
31909020
31092320
61093190
61094592
45090280
45902902
我现在需要以" 31"开头的所有行并将它们存储在另一个文件调用file31.txt中,取所有以" 61"开头的行。并将它们存储在file61.txt中,取出以" 45"开头的所有行将其存储在file45.txt
中file31.txt将包含。
31056780
31909020
31092320
file61.txt将包含。
61093190
61094592
file45.txt将包含。
45090280
45902902
我为所有3个人尝试过这个命令,但它没有按照我的意愿去做。
awk -F\" '/31*/ {print $0}' list.txt > file31
awk -F\" '/61*/ {print $0}' list.txt > file61
awk -F\" '/45*/ {print $0}' list.txt > file45
答案 0 :(得分:3)
您可以在单个awk
脚本中使用输出重定向。它可以通过连接该行的前两个字符来构造文件名。
awk '{ fn = "list" substr($0, 1, 2) ".txt"; print > fn }' list.txt
答案 1 :(得分:1)
您可以使用grep或sed过滤具有匹配模式的行,例如:
sed '/^31/!d' list.txt > list31.txt
或者在你想要的每个数字的for循环中:
for n in "31" "45" "61"; do sed '/^'"$n"'/!d' list.txt > list$n.txt; done
希望它有所帮助。
答案 2 :(得分:0)
您可以使用:
awk '/^31/{print > "file31"} /^45/{print > "file45"} /^61/{print > "file61"}' file
答案 3 :(得分:-1)
for i in `cat list.txt | cut -c1-2 | uniq`; do cat list.txt | grep -P ^${i} > file${i}.txt; done
此命令工作正常,通用性足以适用于所有情况。
现在让我们了解它的工作原理。
cat list.txt | cut -c1-2 | uniq
31
45
61
接下来,我们循环使用这些唯一标识符来创建新文件
cat list.txt | grep -P ^${i}
grep -P查找部分匹配的字符串 - 这里^ - 表示我们只在行的开头查看这个部分字符串。