这可能很容易解决,但我似乎无法得到。使用awk脚本,我试图在每条记录的开头插入一个2位数的代码,提示用户不要将用户消息本身打印到新文件。输入文件的示例:
cat datafile1
V12309012548458631659
V34509012548458683659
V45709012548458672659
...所需的输出是:
cat datafile2
57 V12309012548458631659
57 V34509012548458683659
57 V45709012548458672659
但实际输出是:
cat datafile2
enter agency id:
57 V12309012548458631659
57 V34509012548458683659
57 V45709012548458672659
如何禁止在新数据文件2中打印“输入代理商ID:”消息以仅包含相关数据记录?
注意:我将其作为 可执行文件 运行,如下所示:“./ interactive.awk datafile1> datafile2”。
#!/usr/bin/awk -f
BEGIN{
print "enter agency id:";getline agy_id<"/dev/tty"}
{
print agy_id" "$1;
}
非常感谢提前。
答案 0 :(得分:2)
<强>更新强>
$ cat datafile1
V12309012548458631659
V34509012548458683659
V45709012548458672659
$ cat script.awk
BEGIN {
printf "Enter Id: " ; getline id < "-"
}
{
print id, $1 > ARGV[2]
}
$ awk -f script.awk datafile1 datafile2
Enter Id: 100
$ cat datafile2
100 V12309012548458631659
100 V34509012548458683659
100 V45709012548458672659
答案 1 :(得分:2)
使用GNU awk for nextfile:
$ cat file1
V12309012548458631659
V34509012548458683659
V45709012548458672659
$ awk 'BEGIN{printf "enter agency id: " | "cat>&2"} NR==FNR{agy_id=$0; nextfile} {print agy_id, $0}' - file1 > file2
enter agency id: 57
$ cat file2
57 V12309012548458631659
57 V34509012548458683659
57 V45709012548458672659
对于其他awks,如果你想在awk中完成所有操作,使用getline将是最简单的方法:
$ awk 'BEGIN{printf "enter agency id: " | "cat>&2"; getline agy_id < "-"} {print agy_id, $0}' file1 > file2
enter agency id: 57
$ cat file2
57 V12309012548458631659
57 V34509012548458683659
57 V45709012548458672659
但实际上我只是使用shell来读取agy_id:
printf "enter agency id: "
read agy_id
awk -v agy_id="$agy_id" '{print agy_id, $0}' file1 > file2
不要使用shebangs从shell脚本调用awk,它只会剥夺你使用shell和awk的能力,以获得零利益。