我需要根据以下规则从单个文件创建两个文件: 对于输入文件的每一行,
我可以在ksh中轻松地写这个,但我想知道是否有更好的方法,使用grep / sed / awk或任何其他工具。 我不是awk或sed的专家,但问题是有两个输出文件,所以我不能使用shell的流重定向。
我阅读了一些关于awk和sed的文档,但是在处理几个输出文件时却找不到任何内容。
任何想法?
以下是x = 17和y = 19的示例:
输入文件:
test.empty.field .test
test.non.emptyfield.test
输出文件A
test.empty.field .test
输出文件B
test.non.emptyfield.test
输入文件不是csv文件,我只能使用字符数来检查值。没有分隔符。
答案 0 :(得分:2)
类似的东西:
awk -v x=10 -v y=15 '{
out = (substr($0, x, y-x+1) ~ /[^[:space:]]/) ? "B" : "A"
print > out
}' file
答案 1 :(得分:1)
以下是awk
cat file
1234 89
123 789
123456789
打印到file1
所有包含空格的行,从4
到6
,休息到file2
awk 'substr($0,4,3)==" " {print > "file1";next} {print > "file2"}' file
cat file1
123 789
cat file2
1234 89
123456789
答案 2 :(得分:0)
使用sed
:
pat=[[:space:]] patcol=5 n=3 fileA=A fileB=B
sed -nE "
/^.{$((patcol-1))}$pat{$n}/ w $fileA
//! w $fileB
" <<EOD
1234 89
1234 789
12345 89
EOD
cat A
cat B