我在一个文件中有 1000 多行。文件开始如下(添加行号):
Station Name
Station Code
A N DEV NAGAR
ACND
ABHAIPUR
AHA
ABOHAR
ABS
ABU ROAD
ABR
Run Code Online (Sandbox Code Playgroud)
我需要将它转换为一个文件,通过每两行加入逗号分隔的条目。最终数据应如下所示
Station Name,Station Code
A N DEV NAGAR,ACND
ABHAIPUR,AHA
ABOHAR,ABS
ABU ROAD,ABR
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试的是 - 尝试编写一个 shell 脚本,然后在echo它们之间使用逗号。但我想一个更简单有效的单线可以在sed/ 中完成这里的工作awk。
有任何想法吗?
我有以下两个文件(我用点填充行,因此文件中的每一行都具有相同的宽度,并使 file1 全部大写以使其更清晰)。
contents of file1:
ETIAM......
SED........
MAECENAS...
DONEC......
SUSPENDISSE
contents of file2
Lorem....
Proin....
Nunc.....
Quisque..
Aenean...
Nam......
Vivamus..
Curabitur
Nullam...
Run Code Online (Sandbox Code Playgroud)
请注意,file2 比 file1 长。
当我运行此命令时:
paste file1 file2
Run Code Online (Sandbox Code Playgroud)
我得到这个输出
ETIAM...... Lorem....
SED........ Proin....
MAECENAS... Nunc.....
DONEC...... Quisque..
SUSPENDISSE Aenean...
Nam......
Vivamus..
Curabitur
Nullam...
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使输出如下?
ETIAM...... Lorem....
SED........ Proin....
MAECENAS... Nunc.....
DONEC...... Quisque..
SUSPENDISSE Aenean...
Nam......
Vivamus..
Curabitur
Nullam...
Run Code Online (Sandbox Code Playgroud)
我试过
paste file1 file2 | column -t
Run Code Online (Sandbox Code Playgroud)
但它这样做:
ETIAM...... Lorem....
SED........ Proin....
MAECENAS... Nunc.....
DONEC...... Quisque..
SUSPENDISSE Aenean...
Nam...... …Run Code Online (Sandbox Code Playgroud) 我有 ±10,000 个文件 ( res.1- res.10000),全部由一列和相等数量的行组成。我想要的是,本质上,简单;将所有文件按列合并到一个新文件中final.res。我试过使用:
paste res.*
但是(尽管这似乎适用于一小部分结果文件,但在整个集合上执行时会出现以下错误:Too many open files.
必须有一种“简单”的方法来完成这项工作,但不幸的是,我对 unix 还很陌生。提前致谢!
PS:为了让您了解(我的)数据文件的样子:
0.5
0.5
0.03825
0.5
10211.0457
10227.8469
-5102.5228
0.0742
3.0944
...
Run Code Online (Sandbox Code Playgroud) 我试图在单个文件中输出 2 个文件。我试过下面的命令:
cat file1 file2
Run Code Online (Sandbox Code Playgroud)
但这里的file2数据附加到file1.
我需要的是file1第一行后跟file2第一行,file1第二行后跟file2第二行等。
谁能告诉我如何以简单的方式做到这一点?
如何在没有任何分隔符的情况下垂直连接两个文件?我尝试使用paste -d"" a b,但这只是给了我a.
示例文件:
000 0 0 0
0001000200030004
10 20 30 40
2000 4000
.123
12.1
1234234534564567
Run Code Online (Sandbox Code Playgroud) 我试图找出一种方法,无需触摸鼠标即可将命令行中的当前文本复制到剪贴板。换句话说,我只需要用键盘选择文本。我找到了一个可能导致完整解决方案的半途而废的解决方案:
Ctrl+a - 移动到行首。
Ctrl+k - 切断整条线。
Ctrl+y - 将剪切的文本拉回来。
或者,我也可以Ctrl+u用来执行前两个步骤。
这当然有效,但我想弄清楚剪切文本的确切保存位置。有没有办法在不使用的情况下访问它Ctrl+y?我知道xclip并且我什至用它来将文本直接传输到剪贴板,所以我正在考虑通过管道传输Ctrl+kto保存的数据xclip,但不知道该怎么做。
到目前为止,我得到的方法是编写一个脚本,用于xdotool添加echo到行首和| zxc行尾,然后按回车键(zxc是一个自定义别名,基本上是通过管道连接到xclip)。这也有效,但它不是一个真正“干净”的解决方案。
如果这有什么不同,我正在使用 Cshell。
编辑:我不想screen用作解决方案,忘了提及。
谢谢!
在 Linux 中,我在paste(GNU coreutils) 8.13 中遇到以下问题:
尝试设置除默认值 (TAB) 以外的其他分隔符会导致仅打印已定义分隔符的第一个字符或完全忽略它。
问题:使用时如何定义(多个)分隔符 paste?
简单地使用,例如abc-123作为分隔符会很好。“多个”是指例如 2 个 TABS 而不是一个。
到目前为止,我尝试过的包含分隔符的模式是
--delimiters="\delimiter"--delimiters='\delimiter'--delimiters=$"\delimiter"--delimiters=$'\delimiter'所有结果都相同:仅接受或完全忽略第一个字符。我也尝试过简短版本-d"\"和多个实例 &ndahs; 没有。
还:
--delimiters="\\" → 错误信息什么工作完美,但不是我想要的:
--delimiters="\n" → 换行--delimiters="\0" → 中间没有--delimiters="\t"→ TAB,默认。伟大的。现在,我有两个文件:
aaaa.txt:
a=0;
b=1;
c=2;
Run Code Online (Sandbox Code Playgroud)
bbbb.txt:
d=3
e=4
f=5
Run Code Online (Sandbox Code Playgroud)
我想合并aaaa.txt并bbbb.txt到cccc.txt.
cccc.txt 如下:
a=0;d=3
b=1;e=4
c=2;f=5
Run Code Online (Sandbox Code Playgroud)
那么,我能为此做些什么呢?
文件1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
Run Code Online (Sandbox Code Playgroud)
文件2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
Run Code Online (Sandbox Code Playgroud)
输出文件:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
Run Code Online (Sandbox Code Playgroud) 我经常做这样的操作
paste <(cut -d, -f1 file1.csv) <(cut -d, -f1 file2.csv)
Run Code Online (Sandbox Code Playgroud)
这对于多个文件来说非常乏味。
我可以自动化这个过程,例如使用通配符吗?我可以保存cut结果
typeset -A cut_results
for f in file*.csv; do
cut_results[$f]="$(cut -d, -f1 $f)"
done
Run Code Online (Sandbox Code Playgroud)
但我不确定如何从那里开始。