如何折叠文本文件?

如何折叠文本文件?

我目前正在编辑多个大型文本文件(可能有 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. 使用列模式选择复制第一段文本,然后将其粘贴到第二段文本前面。粘贴后,您只需按 即可,在所有行上放置逗号

相关内容