我目前使用下面的命令来检查 csv 文件是否有重复项,并且在 Fish shell 中运行它效果很好。所以现在我想将其保存为别名,但它会从打印中删除变量。
使用的命令。
awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n
Run Code Online (Sandbox Code Playgroud)
返回别名
awk -F ',' '{print }' Data.csv | sort -n | uniq -cd | sort -n
Run Code Online (Sandbox Code Playgroud)
显然,这不会检查文件中的任何列。那么如何才能将变量调用存储在别名函数中呢。
我运行了命令
alias --save data="awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n"
Run Code Online (Sandbox Code Playgroud)
Fish 与其他 shell 一样,用双引号扩展变量。
alias --save data="awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n"
Run Code Online (Sandbox Code Playgroud)
那"awk?这就是双引号。这也是为什么$2和$3会像交互式 Fish 会话中的变量一样着色。
所以它运行alias,但在执行之前它会替换$2和的值$3,并且由于它们没有设置,所以最终什么也没有,所以你得到print 。
您需要的是转义$变量扩展,或者使用单引号,在这种情况下,您需要转义'awk 调用的引号。
所以要么
alias --save data='awk -F \',\' \'{print $2 $3}\' Data.csv | sort -n | uniq -cd | sort -n'
Run Code Online (Sandbox Code Playgroud)
或者
alias --save data="awk -F ',' '{print \$2 \$3}' Data.csv | sort -n | uniq -cd | sort -n"
Run Code Online (Sandbox Code Playgroud)
老实说,帮自己一个忙,让它成为一个正常的功能:
function data
awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n
end
Run Code Online (Sandbox Code Playgroud)
然后运行funcsave data。这不仅简化了引用,还允许您将其放在$argv任何您想要的位置,因此您可以将其替换Data.csv为$argv并将其运行为data Data.csv或data Data-2.csv或其他。