小编Rom*_*las的帖子

截断文件每一行的unix命令

我有一个 CSV 文件,我想从第三个分号中截断它。例如,如果我有这个文件:

1;foo;bar;baz;x;y;z
2;foo;bar;baz;x;y;z
3;foo;bar;baz;x;y;z
Run Code Online (Sandbox Code Playgroud)

我想获得以下输出:

1;foo;bar
2;foo;bar
3;foo;bar
Run Code Online (Sandbox Code Playgroud)

我不知道我可以使用什么样的 Unix 命令。你有什么建议?

请注意,此操作将在 KSH 脚本上完成。

ksh text-processing csv

5
推荐指数
2
解决办法
3978
查看次数

如何使用 cut 命令获取一行的第一个和最后一个元素?

我已经问过几乎相同的问题,但是这一次,我想检索CSV 文件行的 X 个最新元素。例如,输入文件如下:

1;foo;bar;baz;x;y;z
2;foo;bar;baz;x;y;z
3;foo;bar;baz;x;y;z
Run Code Online (Sandbox Code Playgroud)

cut获取最后两列的命令(最终使用)是什么,所以我得到:

y;z
y;z
y;z
Run Code Online (Sandbox Code Playgroud)

事实上,我的真正目标是检索每行的前 3 个最后 2 个字段,所以我得到:

1;foo;bar;y;z
2;foo;bar;y;z
3;foo;bar;y;z
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能使用像cut -d \; -f 1-3,10-11(如果行中有 11 个元素)这样的命令,因为 CSV 文件不尊重真正的CSV 格式。事实上,行中间的一些字段是加密的,它们的加密值有时可能包含一个;字符(当然,它们没有被包裹在里面")。换句话说,我的台词可能是这样的:

1;foo;bar;#@$"é&^l#;baz;x;y;z
2;foo;bar;#¤=é;)o'#;baz;x;y;z
3;foo;bar;#]]'~é{{#;baz;x;y;z
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,在第二行,有一个额外的;字符,所以我不能在这里使用像这样的命令cut -d \; -f 1-3,7-8,因为 if 会返回那个,这是错误的:

1;foo;bar;y;z
2;foo;bar;x;y  (-> Wrong here, there is a shift)
3;foo;bar;y;z
Run Code Online (Sandbox Code Playgroud)

那么我该如何使用cut来解决我的问题呢?

谢谢

ps:我特别喜欢这个cut命令,所以如果你有一个可以做我想要的但不是我想要的命令cut,那也没关系:)

编辑 …

ksh text-processing cut

3
推荐指数
2
解决办法
2万
查看次数

标签 统计

ksh ×2

text-processing ×2

csv ×1

cut ×1