我正在尝试用bash创建一个简单的CSV编辑器
我努力删除一条线。用户传入的身份证号码为
要删除的行(每行定义一个ID作为第一列)。
这是一个示例文件结构:
ID,Name,Surname
0,Mark,Twain
1,Cristopher,Jones
因此,将id保存为变量并将文件名保存在另一个变量(例如其file.csv)中,我尝试使用此行从bash中删除它:
read -p "Pass the object's ID: " idtoremove
fname=file.csv
sed -i -e "'/^$idtoremove*,/d'" $fname
但是,这对文件没有影响。这条线有什么问题?
另外,如何用变量中的字符串替换以给定ID开头的行?这是我必须面对的另一个问题,但我不知道如何处理这个问题。
答案 0 :(得分:1)
以下脚本可以帮助您。它要求用户输入ID。
cat script.ksh
echo "Please enter the id to be removed:"
read value
awk -v val="$value" -F, '$1!=val' Input_file
如果您想将输出保存到Input_file本身,请在上面的> tmp_file && mv tmp_file Input_file
代码中添加awk
。
sed
:
cat script.ksh
echo "Please enter the id to be removed:"
read value
sed "/^$value,/d" Input_file
请使用上面sed -i.bak
中的sed
选项将输出保存到Input_file本身,并备份Input_file(更改前)。
答案 1 :(得分:0)
最好在awk
:
awk -v id="$idtoremove" -F, '$1 != id' file.csv
如果您正在使用gnu awk
,那么您也可以在原地保存:
awk -i inplace -v id="$idtoremove" -F, '$1 != id' file.csv
对于其他awk
版本,请使用:
awk -v id="$idtoremove" -F, '$1 != id' file.csv > $$.csv &&
mv $$.csv file.csv