awk在查找图案时连接或合并线条
我有一些数据在一个文件中,我需要排序(可能使用awk),如果可能的话,将感谢一些帮助 这是该文件的一个小样本awk在查找图案时连接或合并线条,awk,sed,Awk,Sed,我有一些数据在一个文件中,我需要排序(可能使用awk),如果可能的话,将感谢一些帮助 这是该文件的一个小样本 DEFAULT,number,7996012132,,test,1,SP_A,SIX,,, ,,,,FOUR,,, ,,,,NINE,,, ,,,,TWO,,, DEFAULT,number,7996020217,,test,1,SP_B,,,,, DEFAULT,number,7996020218,,test,1,SP_B,,,,, DEFAULT,number,79960
DEFAULT,number,7996012132,,test,1,SP_A,SIX,,,
,,,,FOUR,,,
,,,,NINE,,,
,,,,TWO,,,
DEFAULT,number,7996020217,,test,1,SP_B,,,,,
DEFAULT,number,7996020218,,test,1,SP_B,,,,,
DEFAULT,number,7996020218,,test,1,SP_A,THREE,,,
,,,,TWO,,,
,,,,NINE,,,
,,,,THREE,,,
DEFAULT,number,7996020215,,test,1,SP_B,,,,,
DEFAULT,number,7996020216,,test,1,SP_A,SIX,,,
,,,,SEVEN,,,
,,,,EIGHT,,,
,,,,FOUR,,,
第1步我想把线放在一起
DEFAULT,number,7996012132,,test,1,SP_A,SIX,,,,,,,FOUR,,,,,,,NINE,,,,,,,TWO,,,
DEFAULT,number,7996020217,,test,1,SP_B,,,,,
DEFAULT,number,7996020218,,test,1,SP_B,,,,,
DEFAULT,number,7996020218,,test,1,SP_A,THREE,,,,,,,TWO,,,,,,,NINE,,,,,,,THREE,,,
DEFAULT,number,7996020215,,test,1,SP_B,,,,,
DEFAULT,number,7996020216,,test,1,SP_A,SIX,,,,,,,SEVEN,,,,,,,EIGHT,,,,,,,FOUR,,,
步骤2我想过滤掉只有数字4的行
DEFAULT,number,7996012132,,test,1,SP_A,,SIX,,,,,,,FOUR,,,,,,,NINE,,,,,,,TWO,,,
DEFAULT,number,7996020216,,test,1,SP_A,,SIX,,,,,,,SEVEN,,,,,,,EIGHT,,,,,,,FOUR,,,
步骤3我只想显示以下内容
7996012132 FOUR
7996020216 FOUR
有什么想法吗?提前谢谢 以下是我的解决方案:
awk 'BEGIN {line=""} /DEFAULT/ {print line; line=$0} !/DEFAULT/ {line = line""$0} END {print line}' data.txt | awk -F, '/FOUR/ {print $3" FOUR"}'
解释:
# Initialize line variable to blank
BEGIN { line="" }
# If the line contains DEFAULT, print what we have and start a new aggregation
/DEFAULT/ { print line; line=$0 }
# If the line does not contain DEFAULT, add this line to the variable
!/DEFAULT/ { line = line""$0 }
# At the end, print whatever we have
END { print line }
然后,您可以根据包含“四”的行,用,
作为字段分隔符,解析出所需的数字:
awk -F, '/FOUR/ {print $3" FOUR"}'
第一部分:
/^$/ {next} # this removes the empty records in your data
{
printf "%s", (NR > 1 && /^DEF/ ?ORS:"") $1 # print
}
测试它:
$ awk -f foo.awk foo.txt
DEFAULT,number,7996012132,,test,1,SP_A,SIX,,,,,,,FOUR,,,,,,,NINE,,,,,,,TWO,,,
DEFAULT,number,7996020217,,test,1,SP_B,,,,,
DEFAULT,number,7996020218,,test,1,SP_B,,,,,
DEFAULT,number,7996020218,,test,1,SP_A,THREE,,,,,,,TWO,,,,,,,NINE,,,,,,,THREE,,,
DEFAULT,number,7996020215,,test,1,SP_B,,,,,
DEFAULT,number,7996020216,,test,1,SP_A,SIX,,,,,,,SEVEN,,,,,,,EIGHT,,,,,,,FOUR,,,
第二部分:
/^$/ {next}
/^DEF/ {
if(NR>1&&foo~/FOUR/)print foo;foo=""
}
{
foo=foo $1
}
END{if(foo~/FOUR/) print foo}
这不是一个代码编写服务。到目前为止你尝试了什么?发布你的代码!你运行它时发生了什么?你以为会发生什么?你有什么特别的问题吗?非常好的Alex,非常感谢,非常感谢!!祝你周末愉快!我很高兴它对你有用!如果此解决方案对您有帮助,您是否可以将其标记为已接受?