我有遗留系统的一些数据文件,我想用Awk处理.每个文件都包含一个记录列表.有几种不同的记录类型,每种记录类型都有一组不同的固定宽度字段(没有字段分隔符).记录的前两个字符表示类型,然后您可以知道应该遵循哪些字段.文件可能如下所示:
AAField1Field2LongerField3
BBField4Field5Field6VeryVeryLongField7Field8
CCField99
Run Code Online (Sandbox Code Playgroud)
使用Gawk我可以设置FIELDWIDTHS,但这适用于整个文件(除非我在某个记录的基础上缺少某种方式设置它),或者我可以将FS设置为""并处理文件中的一个字符一段时间,但这有点麻烦.
有没有一种使用Awk从这样的文件中提取字段的好方法?
编辑:是的,我可以使用Perl(或其他).我仍然很想知道是否有一种合理的方法可以用Awk做到这一点.
如何使用 PHP 按字符数将大文本文件拆分为单独的文件?因此,每 1000 个字符拆分的 10,000 个字符文件将拆分为 10 个文件。此外,我可以在找到句号后才拆分吗?
谢谢。
更新 1:我喜欢 zombats 代码,我删除了一些错误并提出了以下内容,但有没有人知道如何仅在句号后拆分?
$i = 1;
$fp = fopen("test.txt", "r");
while(! feof($fp)) {
$contents = fread($fp,1000);
file_put_contents('new_file_'.$i.'.txt', $contents);
$i++;
}
Run Code Online (Sandbox Code Playgroud)
更新 2:我接受了 zombats 的建议并将代码修改为下面的代码,它似乎有效-
$i = 1;
$fp = fopen("test.txt", "r");
while(! feof($fp)) {
$contents = fread($fp,20000);
$contents .= stream_get_line($fp,1000,".");
$contents .=".";
file_put_contents("Split/".$tname."/"."new_file_".$i.".txt", $contents);
$i++;
}
Run Code Online (Sandbox Code Playgroud) 我有一个文本文件,其中包含{[]}标记内的数据.解析该数据的建议方法是什么,以便我可以只使用标签内的数据?
示例文本文件如下所示:
'这是一堆在任何{[way]}中都没有{[really]}有用的文本.我需要{[get]}一些项目{[from]}."
我想在列表中以"真实","方式","获取","来自"结束.我想我可以用split来做它..但似乎可能有更好的方法.我看过很多解析库,有没有一个对我想做的事情很完美?
进一步解释一下
假设我有两个如下所示的字符串
我是一个会飞的超级男孩!真的 。
我是能打破墙壁的超级男孩!真的 。
所以有些字符是相似的I am super boy who can和Really .。是否有任何东西可以用来查找这两个字符串之间的百分比相似性/差异。
我有100个文本文件,每个文件包含单个列.文件如下:
file1.txt
10032
19873
18326
file2.txt
10032
19873
11254
file3.txt
15478
10032
11254
Run Code Online (Sandbox Code Playgroud)
等等.每个文件的大小不同.请告诉我如何找到所有这100个文件中常见的数字.
根据此cut 命令缺少 --complement 选项。关于如何获得这个有什么建议吗?
我需要这个,因为 Linux sh 支持它
我的问题与此非常相似,所以我尝试按照以下方法使其工作
#!/bin/sh
EXTRA=$@
REST=`echo $EXTRA | cut -d ' ' --complement -s -f1`
echo $REST
Run Code Online (Sandbox Code Playgroud)
有任何建议欢迎提出
PS:我不能使用 bash 代替 sh
我正在尝试使用 sed 从文件中的一行中提取特定字符串。目前我正在使用 while 循环读取文件并搜索特定字符串。当找到该字符串时,我正在提取它,但是我需要使用 sed 来解析输出,以便我只获取两个斜杠之间的字符串(它是一个目录名,所以如果可能的话,我需要同时保留开头和结尾的斜杠)。这是我正在运行以搜索文件的循环:
#!/bin/sh
file=configFile.conf
while read line
do
if echo "$line" | grep -q "directory_root"
then DIR_ROOT="$line"
fi
done < "$file"
echo $DIR_ROOT
exit 0
Run Code Online (Sandbox Code Playgroud)
while 循环起作用并回显以下字符串:
directory_root /root/config/data/
Run Code Online (Sandbox Code Playgroud)
然后我需要使用 sed 以获得以下输出,以便将正确的目录名称传递给另一个脚本:
/root/
Run Code Online (Sandbox Code Playgroud)
是否可以使用 sed 和正则表达式从回显输出中仅提取上述内容?
谢谢
我有一个 .txt 文件,我想替换每一行第一次出现的匹配字符串。
例如,下面是 foo.txt 中的内容:
838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76 /Volumes/Documents - Part 1/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997 /Volumes/Documents - Part 1/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
f3d0ea2d775cf8edc1ddbd76e2562d3e4a2e281fe2aeb1333ef99536d1a180ee /Volumes/Documents - Part 1/manuals/dryer.pdf
\ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\{2}:`!*?$(){}[]<>|-=+% [meowzers] (1)~^^.$[E-frLOL[MAY[]{}()?<NUL>
\9c993445f7f6216b4fc7d35aef47afa16f4f831f2510b7fddd1e42c4cafb518c /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\:`!CAT MEOW!!![hey]{15}(hello)@$%&^*(#@@*?$(){}[]<>|-=+% ~^^.$[E-frLOL[MAY[]{}()?<NUL>
Run Code Online (Sandbox Code Playgroud)
我要替换Documents - Part 1与Documents - Part 1 BU,但只有在每一行的第一次出现。
所以,它最终看起来像这样:
838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76 /Volumes/Documents - Part 1 BU/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997 /Volumes/Documents - Part 1 BU/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - …Run Code Online (Sandbox Code Playgroud) 我有两个非常大的文件(文件 1 和文件 2),文件 1 有很多行和列,为了简单起见,我粘贴了第 1 列。我只想打印文件 1 特有的那些行。
文件一:
AT1G01010.1
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
AT1G01046.1
AT1G01050_ID7
Run Code Online (Sandbox Code Playgroud)
文件2:
AT1G01010
AT1G01046
AT1G01050
Run Code Online (Sandbox Code Playgroud)
输出:
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu 中尝试过comm命令,但它不起作用,因为它检查完整的模式。因此,当它尝试检查时,AT1G01010.1它AT1G01010不会显示任何常见内容。
我正在解析一个文件。
文件格式是这样的:
Column1 Column2 Column3 Column4 Column5
1 2 3 4 5
6 7 8 9
10 11 12 14
15 16 17 18
Run Code Online (Sandbox Code Playgroud)
一些列是空的。所以我正在读取与上述格式相同的两个文件并合并这两个文件并添加“|” 每列之间,所以它应该是这样的:
Column1 | Column2 | Column3 | Column4 | Column5
1 | 2 | 3 | 4 | 5
6 | 7 | | 8 | 9
10 | 11 | 12 | | 14
| 15 | 16 | 17 | 18
Run Code Online (Sandbox Code Playgroud)
但我越来越像这样。列中的空格被删除。
Column1 | Column2 | Column3 | Column4 | Column5
1 | …Run Code Online (Sandbox Code Playgroud)