我发现以下命令可以从文件中删除最后一列
awk 'NF{NF-=1};1' <in >out
问题来了。该文件最初由'\ t'分隔,在执行此命令后,分隔符不再为'\ t'。有人知道原因吗?以及如何保留定界符?
答案 0 :(得分:1)
您必须定义输出分隔符:
open
注释::重新定义变量open class MyClasss{}
是POSIX的未定义行为,但GNU awk和其他一些awk版本允许这样做。
以下对于任何awk都可以很好地工作:
awk 'BEGIN{FS=OFS="\t"}NF{NF-=1};1' input > output
awk非常了解两个概念:
NF
与另一个记录分隔。默认情况下,这是awk 'BEGIN{FS="\t"}{sub(FS "[^"FS"]*$","")}1' input > output
分隔。默认情况下,这是任何空白序列(空格和制表符)。很显然,如果您可以通过定义记录分隔符RS
和字段分隔符FS
来定义输入的构建方式,则还可以告诉awk输出的构建方式。因此,您可以定义输出记录分隔符RS
,当您使用FS
语句时,该分隔符将附加在每个打印记录之后。在ORS
旁边,您可以定义输出字段分隔符print
,该分隔符告诉awk如何拆分字段。通常,将打印语句中的每个ORS
运算符替换为OFS
,例如:
,
将打印
OFS
当您更改字段或删除某些字段时,完整记录print field1, field2, field3
也将用field 1 OFS field2 OFS field3 ORS
重新定义为字符串。
另一种解决方案可能是使用$0
和OFS
:
rev
答案 1 :(得分:1)
awk '{sub(/\t[^\t]*$/,"")}1' file
以上内容可在任何awk中使用。
答案 2 :(得分:1)
以下是一些替代解决方案,希望它们可以为您提供一些选择。
for (var i = 0; qs[i]; i++) {
if (counter == i + 1 && answer == userInput) {
qs[i].style.backgroundColor = "green";
} else {
qs[i].style.backgroundColor = "red";
}
}