删除列 awk
Remove column awk
我有输入文件:
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
我希望我的文件是这样的:(包含 3 个带有 header 和预告片的拆分文件加上删除前 3 列
DETAIL 07032017
HEADER 1 | HEADER 2 |
1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 |
1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 |
1356438284972|1356438292151693|
EOF 3
至于我现在的命令;
awk -v date="$(date +"%d%m%Y")" -F\| 'NR==1 {h=[=12=]; next}
{file="FILE_""_""_"date".csv";
print (a[file]++?"": "DM9 "date"" ORS h ORS) [=12=]> file} END{for(file in a)
print "EOF " a[file] > file}' testing.csv
我只能得到(如上面的命令)我可以拆分文件,添加 header 和预告片但 尚未删除列 :
DETAIL 07032017
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
EOF 3
以上命令仅用于拆分,添加header和带有记录数的尾部。
但我想在拆分后删除前 3 列并添加 header 尾部。可能吗?
或者我需要拆分然后删除,只剩下最后一个做 header 和预告片?
我试试这个;
awk -v date="$(date +"%d%m%Y")" -F\| 'NR==1 {h=[=14=]; next}
{file="FILE_""_""_"date".csv";
print (a[file]++?"": "DM9 "date"" ORS h ORS)**substr([=14=], index([=14=],))**> file} END{for(file in a) print "EOF " a[file] > file}' testing.csv
我使用了 substr 但根本不起作用。
我想删除前 3 列
试试这个 -
awk -v date="$(date +"%d%m%Y")" -F\| 'BEGIN{print "DETAIL " date} {print ,FS} END {print "EOF " NR}' OFS="|" f
DETAIL 07032017
1356438284972|1356438292151693|
1356438284972|1356438292151693|
1356438284972|1356438292151693|
EOF 3
awk -v Date="$(date +'%d%m%Y')" '
# print header
BEGIN { print "DETAIL " Date }
# prepare new content
{ sub( /([^|][|]){3}/, "") }
# print new content
7
# print footer
END { print "\nEOF " NR }
# redirect output to your final file
' YourSource > YourFile
正如我在之前 post 中所写,您可以使用 substr([=11=], index([=11=],))
删除第 1 至 3 列。
您上面的示例文件缺少 header,所以我添加了一个 header 来进行测试。
下面的测试结果应该符合您的预期。
如果在您的机器上这不起作用,可能是您的 PC 有问题。
echo "cat data.csv"
cat data.csv
echo "awk - started "
awk -v date="$(date +"%d%m%Y")" -F"|" 'NR==1 {h=substr([=10=], index([=10=],)); next} \
{file="FILE_""_""_"date".csv";print (a[file]++?"": "DM9 "date"" ORS h ORS) substr([=10=], index([=10=],)) >file } \
END{for(file in a) print "EOF " a[file] >file}' data.csv
echo "awk - finished "
echo "csv file generated:"
cat FILE*.csv
echo "script finish"
#Terminal Output:
cat data.csv
Header1|Header2|Header3|Header4|Header5|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
awk - started
awk - finished
csv file generated:
DM9 07032017
Header4|Header5|
1356438284972|1356438292151693|
1356438284972|1356438292151693|
1356438284972|1356438292151693|
EOF 3
script finish
我有输入文件:
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
我希望我的文件是这样的:(包含 3 个带有 header 和预告片的拆分文件加上删除前 3 列
DETAIL 07032017
HEADER 1 | HEADER 2 |
1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 |
1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 |
1356438284972|1356438292151693|
EOF 3
至于我现在的命令;
awk -v date="$(date +"%d%m%Y")" -F\| 'NR==1 {h=[=12=]; next}
{file="FILE_""_""_"date".csv";
print (a[file]++?"": "DM9 "date"" ORS h ORS) [=12=]> file} END{for(file in a)
print "EOF " a[file] > file}' testing.csv
我只能得到(如上面的命令)我可以拆分文件,添加 header 和预告片但 尚未删除列 :
DETAIL 07032017
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
EOF 3
DETAIL 07032017
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
EOF 3
以上命令仅用于拆分,添加header和带有记录数的尾部。
但我想在拆分后删除前 3 列并添加 header 尾部。可能吗?
或者我需要拆分然后删除,只剩下最后一个做 header 和预告片?
我试试这个;
awk -v date="$(date +"%d%m%Y")" -F\| 'NR==1 {h=[=14=]; next}
{file="FILE_""_""_"date".csv";
print (a[file]++?"": "DM9 "date"" ORS h ORS)**substr([=14=], index([=14=],))**> file} END{for(file in a) print "EOF " a[file] > file}' testing.csv
我使用了 substr 但根本不起作用。
我想删除前 3 列
试试这个 -
awk -v date="$(date +"%d%m%Y")" -F\| 'BEGIN{print "DETAIL " date} {print ,FS} END {print "EOF " NR}' OFS="|" f
DETAIL 07032017
1356438284972|1356438292151693|
1356438284972|1356438292151693|
1356438284972|1356438292151693|
EOF 3
awk -v Date="$(date +'%d%m%Y')" '
# print header
BEGIN { print "DETAIL " Date }
# prepare new content
{ sub( /([^|][|]){3}/, "") }
# print new content
7
# print footer
END { print "\nEOF " NR }
# redirect output to your final file
' YourSource > YourFile
正如我在之前 post 中所写,您可以使用 substr([=11=], index([=11=],))
删除第 1 至 3 列。
您上面的示例文件缺少 header,所以我添加了一个 header 来进行测试。
下面的测试结果应该符合您的预期。
如果在您的机器上这不起作用,可能是您的 PC 有问题。
echo "cat data.csv"
cat data.csv
echo "awk - started "
awk -v date="$(date +"%d%m%Y")" -F"|" 'NR==1 {h=substr([=10=], index([=10=],)); next} \
{file="FILE_""_""_"date".csv";print (a[file]++?"": "DM9 "date"" ORS h ORS) substr([=10=], index([=10=],)) >file } \
END{for(file in a) print "EOF " a[file] >file}' data.csv
echo "awk - finished "
echo "csv file generated:"
cat FILE*.csv
echo "script finish"
#Terminal Output:
cat data.csv
Header1|Header2|Header3|Header4|Header5|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
awk - started
awk - finished
csv file generated:
DM9 07032017
Header4|Header5|
1356438284972|1356438292151693|
1356438284972|1356438292151693|
1356438284972|1356438292151693|
EOF 3
script finish