我有一个文本文件,其中包含一系列类似于以下作业的作业。我想做的就是将JOB_NAME
移到delete_job:
行上,以使每个作业看起来像
delete_job: JOB_NAME
我尝试了很多方法,但是无法正常工作!有什么想法可以实现吗?
delete_job:
JOB_NAME
job_type: BOX
description: "*******"
date_conditions: 0
owner: *******
alarm_if_fail: 1
答案 0 :(得分:1)
EDIT2: 根据ED先生的建议,现在也添加了1个解决方案。
awk 'val{print val OFS $0;val="";next}/delete_job/||/update_job/||/insert_job/{val=$0;next} 1' Input_file
编辑: ,因为OP告知可能要搜索许多字符串,因此现在进行相应的更改。
awk '/delete_job/||/update_job/||/insert_job/{val=$0;getline;print val OFS $0;next} 1' Input_file
能否请您尝试以下操作,如果有帮助,请告诉我。
awk '/delete_job/{val=$0;getline;print val OFS $0;next} 1' Input_file
答案 1 :(得分:1)
编辑得不错,
ed infile <<'EOE'
g/^delete_job:$/ s/$/ /\
.,+j
wq
EOE
这将收集所有与^delete_job:$
和g//
全局命令匹配的行; s/$/ /
会在该行后面添加一个空格,.,+j
将其与下一行连接起来,然后wq
将缓冲区写回到文件并退出。
答案 2 :(得分:1)
sed解决方案:
sed '/^delete_job:$/{N;s/\n/ /;}' filename
答案 3 :(得分:1)
用awk做到这一点的正确方法(假设有多个可能的“ action_job”行)是只在看到时保存“ action_job”行,然后在打印下一行时将其打印为前缀:< / p>
awk '/(delete|update|insert)_job/{act=$0 OFS; next} {print act $0; act=""}'
答案 4 :(得分:0)
我会用awk,也许是这样的
<yourfile awk '
BEGIN { output = 1 }
/delete_job:/ { output = 0; next; }
output == 0 { print "delete_job: " $0; output = 1; next; }
output == 1 { print }' > newfile
也许有帮助。结果将被写入newfile。
答案 5 :(得分:0)
另外两个def index(request):
foos = Foo.objects.all()
foo_barform_pairs = []
for foo in foos:
foo_barform_pairs.append((foo, BarForm(initial={'name': foo.bar.name, 'num': foo.bar.num})))
return render(request, 'foo_list.html', {"foo_barform_pairs": foo_barform_pairs}
at net.corda.testing.driver.DriverParameters.<init>(Driver.kt)
at com.example.NodeDriver.main(NodeDriver.java:32)
[quasar] ERROR: java/lang/Object
java.lang.IllegalArgumentException
或
awk
答案 6 :(得分:0)
使用paste
,head
和tail
:
$ (head -n2 | paste -d' ' -s; tail -n+1) < filename.txt