我正在文件的每一行上运行realpath命令。文件的两个示例行是
for index,value in enumerate([2, 4, 0, 3]):
df.loc[index,:] = df.loc[index,:].shift(value)
print(df)
0 1 2 3 4 5
0 NaN NaN 2.0 3.0 4.0 NaN
1 NaN NaN NaN NaN 1.0 NaN
2 5.0 6.0 7.0 2.0 3.0 NaN
3 NaN NaN NaN 4.0 3.0 NaN
运行命令后,我期望以上两行输出:
$HOME:1:2
$HOME:1:2 3
我正在运行的awk命令为/home/mjain8:1:2
/home/mjain8:1:2 3
现在,当我在第一行运行命令时,它运行正常,并为我提供了所需的输出。但是对于文件的第2行(如上所示),输出为awk 'BEGIN{cmd="realpath "}{cmd$0|getline;print $0;}' FS=':' OFS=':'
(并且否 /home/mjain8:1:2
)。那就是输出只包含空格前的行。
有人可以指出我在做什么错。另外,如果您有使用其他命令的建议,也请告知我。自最近两天以来,我一直在努力使用awk进行同样的操作。
我想使其易于携带,以便它可以在尽可能多的外壳上运行。
答案 0 :(得分:2)
使用shell的while
循环会简单得多,请您尝试以下操作。对我来说很好。
while IFS=':' read -r path rest
do
real=$(realpath "$path")
echo "$real:$rest"
done < "Input_file"
上面的代码具有real
变量,首先具有realpath
命令的值,然后将其输出与rest
变量一起打印,以防您想根据三位一体注释的用途直接打印它们然后。
while IFS=':' read -r path rest
do
echo "$(realpath "$path"):$rest"
done < "Input_file"
答案 1 :(得分:0)
还可以使用Perl-one衬纸
[Java] Type mismatch: cannot convert from Collector<Object,capture#3-of ?,Map<Object,Object>> to Supplier<R>