我目前正在编辑多个大型文本文件(可能有 500 个文本列表文件),并且需要折叠这些文件
例如这是我的一个文本文件:
1966 Q3
Fort
COB
LGL
Asse
AP
BAS
Lis
46.81
11.11
9.06
4.7
4.49
2.41
1.34
现在我想转换为这个:
1966 Q3
Fort,46.81
COB,11.11
LGL,9.06
Asse,4.7
AP,4.49
BAS,2.41
Lis,1.34
名称行始终从第 2 行开始,一直持续到第一个数字行开始
我有 500 个文本文件,此列表只是我的文件的一个示例
哪个脚本、网站或正则表达式可以做到这一点?
注意:第一行保持不变
答案1
使用 可以很容易地做到这一点awk
。我知道问题是针对 Notepad++ 的,但由于文件 1) 很大,2) 很多,所以我会使用脚本来完成。
可以在 Windows 和许多其他平台上下载 Awk。它可以通过命令行运行。
命令行中的类似内容:
在多个文件上运行此操作:
示例 1:一堆文件d:\myfiles
:
for %f in (d:\myfiles\*.txt) do "c:\path\to\awk.exe" -f "c:\path\to\scriptfile.awk" "%f" > "%f_OUT.txt"
示例 2:包含列表要处理的文件数:
for /F %m in (c:\myfilelist.txt) do "c:\path\to\awk.exe" -f "c:\path\to\scriptfile.awk" "%m" > "%m_OUT.txt"
awk 在控制台上写入,因此输出将定向到输出文件。示例:d:\myfiles\xyz.txt 将输出为 d:\myfiles\xyz.txt_OUT.txt。根据需要进行更改,或在目录前加上相同的名称。示例:> d:\converted\%~nf
。%~n 部分用于获取只是名称,而不是目录前缀。
要将所有文件重定向到相同的输出,请将最后一部分替换为>> myoutputfile.txt
。
Awk 脚本文件
# ---
# this assumes file format where
# - line 1 is kept
# - N lines that does NOT start with a number
# - same N lines that DO start with a number
# - output is text,number for each line index.
# ---
BEGIN{
OFS="," # set separator to comma for output
}
# first line, just print
NR==1{
print
}
# for line numbers over 1:
NR>1{
if ($0 !~ /^[0-9]/ ) { # if this does NOT start with a number...
a[NR] = $0 # add to an array column 1
lc++ # increase an element counter, which starts at 0
}
else
{
b[NR-lc] = $0 # a number, add to second column
}
}
END {
for (i=2;i<=lc+1;i++) { # finally print the array
print a[i],b[i]
}
}
我用你的文件进行了测试:
1966 Q3
Fort,46.81
COB,11.11
LGL,9.06
Asse,4.7
AP,4.49
BAS,2.41
Lis,1.34
答案2
如果您只需要执行几次,手动执行比通过脚本或其他自动化方式更合理,则有几种方法可以实现此目的。当然,这是假设文件遵循上述格式,一半文本位于另一半文本上方的行中。
选项 1. 将第一部分复制并粘贴到电子表格的 A 列中。然后将第二部分复制并粘贴到 B 列中。然后将整个内容复制并粘贴回记事本,然后使用“查找 + 替换”插入逗号。
选项 2. 使用列模式选择复制第一段文本,然后将其粘贴到第二段文本前面。粘贴后,您只需按 即可,在所有行上放置逗号